﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common.Properties;
using System.Net.Mail;
using Common.Mail;

namespace Common.MessageHandlers
{
    /// <summary>
    /// Обработчик посылки писем
    /// </summary>
    class MailMessageToBossHandler : IMessageHandler
    {
        /// <summary>
        /// Обработчик посылки письма руководителю
        /// </summary>
        public MailMessageToBossHandler()
        {
        }


        /// <summary>
        /// Максимальное кол-во попыток
        /// </summary>
        public int MaxTryCount
        {
            get { return 2; }
        }


        /// <summary>
        /// Обрабатывает сообщение. В случае ошибки должен кидаться Exception
        /// </summary>
        /// <param name="messageBody"></param>
        /// <param name="emailAddresses"></param>
        public void Handle(string messageBody, string emailAddresses, string fromAddressName, string messageSubject, string fromAddress = null)
        {
            // Конфигурационные данные берутся из web.config
            var mailSettings = MailSenderSettingsHelper.GetMailSettings();
            mailSettings.FromAddressName = fromAddressName;

            if (!string.IsNullOrEmpty(fromAddress))
                mailSettings.FromAddress = fromAddress;

            //Посылаем сообщение по почте по нижеследующим адресам
            List<MailAddress> copyTo = new List<MailAddress>();
            List<MailAddress> blindCopyTo = new List<MailAddress>();

            //Копия администратору
            var settings = AdminSettingsHelper.GetAdminSettings();
            if (settings.SendCopyToAdmin && !string.IsNullOrEmpty(settings.EmailAddress))
            {
                copyTo = MailAddressHelper.ParseFromString(settings.EmailAddress).ToList();
            }

            
            new MailSender(mailSettings).SendMail(CreateMessageSubject(messageSubject),
                CreateMessageBody(messageBody),
                MailAddressHelper.ParseFromString(emailAddresses),
                copyTo, blindCopyTo, null);

            //Записываем сообщение в БД, что все хорошо. Не решил пока надо ли это
        }


        /// <summary>
        /// Вызывается, если сообщение окончательно не может быть обработано
        /// </summary>
        public void OnHandleError(string messageString, Exception exc)
        {
            //var message = NewRequestMailMessage.Deserialize(messageString);
            //var notificationResult = new REQUEST_NOTIFICATION_RESULT
            //{
            //    REQUEST_ID = message.RequestID,
            //    MESSAGE = message.Serialize(),
            //    NOTIFICATION_TYPE = message.MessageType,
            //    ERROR = exc.ToString(),
            //};
            //new RequestsRepository(connection).AddRequestNotificationResult(notificationResult);
            
            ////Логгируем сообщение об ошибке
            //ErrorLog errorLog = ErrorLog.GetDefault(null);
            //errorLog.Log(new Error(exc));
        }


        internal string CreateMessageSubject(string messageSubject)
        {
            return String.Format(messageSubject);
        }


        internal string CreateMessageBody(string message)
        {
            //return String.Format(@"Заказ: <br />{0}", message);
            return String.Format(@"<br />{0}", message);
        }



    }
}
